/*
 * IdJuego.h
 *
 *  Created on: 07/01/2010
 *      Author: San Martín, Matías I.
 */

#ifndef IDJUEGO_H_
#define IDJUEGO_H_

#include "CommonTypes.h"

//TODO CAMBIAR DE LUGAR ESTO, EL MIDDLEWARE NO PUEDE DEPENDER DE LA APLICACION
#include "../../Aplicacion/Common/Mensajes/MensajesCommonTypes.h"

using namespace middleware::common;

/**
 * Represeenta un identificador de juego dentro del sistema
 */
class IdJuego {

//------------------------------ CONSTANTES ------------------------------
public:
	static const T_ID_JUEGO ID_UNDEFINED = -1;
//------------------------------ ATRIBUTOS ------------------------------
private:
	T_ID_JUEGO _id;

//------------------------------ METODOS ------------------------------
public:

	IdJuego() :
		_id(ID_UNDEFINED) {
	}

	IdJuego(T_ID_JUEGO id) :
		_id(id) {
	}

	virtual ~IdJuego(){}

	void setId(T_ID_JUEGO id) {
		_id = id;
	}

	const T_ID_JUEGO& getId() const {
			return _id;
	}

	/**
	 * Asigna el identificador neutral (ninguno)
	 */
	void setNinguno()
	{
		_id = ID_UNDEFINED;
	}

	bool isDefined() {
		return _id != ID_UNDEFINED;
	}

	bool operator == (const IdJuego& otro) const
	{
		return _id == otro._id;
	}

	bool operator != (const IdJuego& otro) const
	{
		return !(otro == *this);
	}

	bool operator < (const IdJuego& otro) const
	{
		return _id < otro._id;
	}

	bool operator > (const IdJuego& otro) const
	{
		return otro < *this;
	}

	void saveToMensaje (aplicacion::t_identificadorFuente& id) const
	{
		id.contenedor = _id;

		/* el juego (grupo de jugadores) se representa por el id de juego y
		 * -1 para el identificador de contenido */
		id.contenido = -1;
	}

	void loadFromMensaje (const aplicacion::t_identificadorFuente& id)
	{
		_id = id.contenedor;
	}

private:
	friend std::ostream &operator<<( std::ostream &stream, const IdJuego &obj );
};

#endif /* IDJUEGO_H_ */
